/**
 * @作者 zxy
 * @时间 2023-04-25 12:57
 * @说明 832. 翻转图像
 * 给定一个 n x n 的二进制矩阵 image ，先 水平 翻转图像，然后 反转 图像并返回 结果 。
 * 水平翻转图片就是将图片的每一行都进行翻转，即逆序。
 * 例如，水平翻转 [1,1,0] 的结果是 [0,1,1]。
 * 反转图片的意思是图片中的 0 全部被 1 替换， 1 全部被 0 替换。
 * 例如，反转 [0,1,1] 的结果是 [1,0,0]。
 * 示例 1：
 * 输入：image = [[1,1,0],[1,0,1],[0,0,0]]
 * 输出：[[1,0,0],[0,1,0],[1,1,1]]
 * 解释：首先翻转每一行: [[0,1,1],[1,0,1],[0,0,0]]；
 * 然后反转图片: [[1,0,0],[0,1,0],[1,1,1]]
 */
public class Solution {
    /**
     * 执行用时：1 ms, 在所有 Java 提交中击败了0.19% 的用户
     * 内存消耗：42 MB, 在所有 Java 提交中击败了13.59%的用户
     * @param image
     * @return
     */
    public int[][] flipAndInvertImage(int[][] image) {
        for (int i = 0; i < image.length; i++) {
            for (int i1 = 0; i1 < image[i].length / 2; i1++) {
                image[i][i1] += image[i][image[i].length - i1 - 1];
                image[i][image[i].length - i1 - 1] = image[i][i1] - image[i][image[i].length - i1 - 1];
                image[i][i1] -= image[i][image[i].length - i1 - 1];
                image[i][i1] = image[i][i1] == 1 ? 0 : 1;
                image[i][image[i].length - i1 - 1] = image[i][image[i].length - i1 - 1] == 1 ? 0 : 1;
            }
            if (image[i].length % 2 == 1)
                image[i][image[i].length / 2] = image[i][image[i].length / 2] == 1 ? 0 : 1;
        }
        return image;
    }
}
